// Copyright (C) 2024 Rubén Beltrán del Río // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see https://map.tranquil.systems. import SwiftUI struct SearchBar: View { @Binding var term: String @FocusState var isSearchFocused: Bool var onNext: () -> Void = {} var onPrevious: () -> Void = {} var onSubmit: () -> Void = {} var onDismiss: () -> Void = {} var body: some View { HStack(spacing: 2.0) { ZStack { TextField("Search", text: $term) .textFieldStyle(.roundedBorder) .padding(.trailing, 16.0) .focused($isSearchFocused) .onAppear { isSearchFocused = true } .onKeyPress { press in if press.key == .return { if press.modifiers.contains(.shift) { onPrevious() return .handled } onNext() return .handled } return .ignored } } Spacer() Button(action: onPrevious) { Image(systemName: "chevron.left") .font(.Theme.smallControl) }.keyboardShortcut( "g", modifiers: EventModifiers([.command, .shift]) ).help("Find Previous (⇧⌘G)") Button(action: onNext) { Image(systemName: "chevron.right") .font(.Theme.smallControl) }.keyboardShortcut( "g", modifiers: EventModifiers([.command]) ).help("Find Next (⌘G)") Button(action: onDismiss) { Text("Done") .font(.Theme.smallControl) }.keyboardShortcut(.escape, modifiers: EventModifiers()) .help("Done (⎋)") }.padding(4.0) } } #Preview { SearchBar(term: .constant("Hello")) }